//
// Created by Win10 on 2022/11/15.
//

#ifndef C_DATA_STRUCTURE_TB_TREE_H
#define C_DATA_STRUCTURE_TB_TREE_H

typedef char ElemType;

typedef struct ThreadNode{
    ElemType data;
    struct ThreadNode *lchild,*rchild;
    int ltag,rtag;
}ThreadNode,*ThreadTree;


void InitTree(ThreadTree& T);//初始化树

/*--------------------------先序线索--------------------------*/
void CreatPreThread(ThreadTree T);//建立先序线索化二叉树
/*先序线索二叉树中找先序后继*/
ThreadNode* Nextnode_Preorder(ThreadNode* p);//找先序线索二叉树中节点p在先序序列下的后继
void Preorder(ThreadTree T);//遍历线索二叉树，找后继

/*--------------------------中序线索--------------------------*/
void CreatInThread(ThreadTree T);//建立中序线索化二叉树
/*中序线索二叉树中找中序后继*/
ThreadNode* Nextnode_Inorder(ThreadNode* p);//找中序线索二叉树中节点p在中序序列下的后继
void Inorder(ThreadTree T);//遍历线索二叉树，找后继
/*中序线索二叉树中找中序前驱*/
ThreadNode* Prenode_Inorder(ThreadNode* p);//在中序线索二叉树中找到节点p的前驱节点
void RevInorder(ThreadTree T);//逆向遍历线索二叉树，找前驱

/*--------------------------后序线索--------------------------*/
void CreatPostThread(ThreadTree T);//建立先序线索化二叉树
/*后序线索二叉树中找后序前驱*/
ThreadNode* Prenode_Postorder(ThreadNode* p);//找后序线索二叉树中节点p在后序序列下的前驱
void RevPostorder(ThreadTree T);//逆向遍历线索二叉树
#endif //C_DATA_STRUCTURE_TB_TREE_H
